#include "Sequence_Queue.h"

#define QUEUE_INIT_SIZE 100 //存储空间初始分配量
#define QUEUE_INCREMENT 10   //存储空间分配增量


//enum Status{OK=1,ERROR=-2,TRUE=1,FALSE=0,EMPTY=-1,OVERFLOW=-3};
//typedef enum Status Status;
//
//typedef int SElemType;  //自定义元素类型
//
//typedef struct {
//
//    SElemType *Head;    //在队列构造之前和销毁之后，base的值为NULL
//    SElemType *Tail;     //队头指针
//    int QueueSize;      //当前已分配的存储空间，以元素为单位
//}SqQueue;
//
//Status InitQueue(SqQueue *Q);   //构造一个空队
//Status DestroyQueue(SqQueue *Q);    //销毁队Q，Q不再存在
//Status ClearQueue(SqQueue *Q);  //把Q置为空队
//Status QueueEmpty(SqQueue Q);   //若Q为空队返回TRUE，否则返回FALSE
//int QueueLength(SqQueue Q);     //返回Q的元素个数，即队的长度
//SElemType* GetHead(SqQueue Q);  //若队不空，则返回队头元素，否则返回NULL
//Status EnQueue(SqQueue *Q,SElemType e);    //插入元素e为
//SElemType DeQueue(SqQueue *Q);  //若队不空，则删除队头元素并返回，否则返回
//Status QueueTraverse(SqQueue Q,Status (*visit)(SElemType));     //从栈底到栈顶一次对队中每个元素调用函数visit（），一旦visit（）失败，则返回ERROR

Status visit(SElemType e);

int main() {

    SqQueue Q;
    InitQueue(&Q);

    for (int i = 0; i < 5; ++i) {
        SElemType e=i+1;
        EnQueue(&Q,e);
    }

    printf("Traverse:\t");
    QueueTraverse(Q,visit);
    printf("\n");

//    DestroyQueue(&Q);


//    ClearQueue(&Q);


//    if(QueueEmpty(Q))
//        printf("\nQueue is Empty!\n");
//    else
//        printf("\nQueue isn't Empty!\n");


//    printf("\nStackSize:%d\tStackLength:%d\n",Q.QueueSize, QueueLength(Q));


//    printf("\nTopElem:%d\n", *GetHead(Q));


//    printf("\nPopElem:%d\n", DeQueue(&Q));



    printf("Traverse:\t");
    QueueTraverse(Q,visit);
    printf("\n");

    return 0;
}

Status visit(SElemType e){

    printf("%d\t",e);
    return OK;
}